layui.use(['table'], function () {
    var table = layui.table;

// ztree树展示
    $(document).ready(function () {
        $.ajax({
            type: "get",
            id: 'tree',
            url: "/product/getProductZtree",
            async: true,
            success: function (res) {
                zTreeObj = $.fn.zTree.init($("#tree"), settingss, res.Product); //初始化树
                zTreeObj.expandAll(true);   //true 节点全部展开、false节点收缩
            }
        });
    });

    var settingss = {
        data: {
            simpleData: {
                enable: true,  //true 、 false 分别表示 使用 、 不使用 简单数据模式
                idKey: "classifyId",   //节点数据中保存唯一标识的属性名称
                pIdKey: "parentId",    //节点数据中保存其父节点唯一标识的属性名称
                rootPId: -1  //用于修正根节点父节点数据，即 pIdKey 指定的属性值
            },
            key: {
                name: "classifyTitle"  //zTree 节点数据保存节点名称的属性名称  默认值："name"
            }
        },
        view: {
            addHoverDom: addHoverDom, //当鼠标移动到节点上时，显示用户自定义控件
            removeHoverDom: removeHoverDom //离开节点时的操作
        },

        edit: {
            enable: true,   //拖拽必须开启edit
            drag: {
                isCopy: false,//拖拽时, 设置是否允许复制节点
                isMove: true,//拖拽时, 设置是否允许移动节点
                prev: false, //拖拽到目标节点时，设置是否允许移动到目标节点前面的操作
                next: false,//拖拽到目标节点时，设置是否允许移动到目标节点后面的操作
                inner: true,//拖拽到目标节点时，设置是否允许成为目标节点的子节点
            },
            showRenameBtn: false,//隐藏自带的修改按钮
            showRemoveBtn: false,//隐藏自带的删除按钮
        },
        callback: {
            // 单击事件
            onClick : zTreeOnClick,
            beforeRemove: beforeRemove,
            onRemove: onRemove,
            beforeEditName: beforeEditName,//点击编辑时触发，用来判断该节点是否能编辑
            onRename: onRename,//编辑后触发，用于操作后台
            beforeDrag: zTreeBeforeDrag,//拖拽前
            beforeDrop: zTreeBeforeDrop,//放置前
            onDrop: zTreeOnDrop,//放置
        },
        check: {
            enable: false,  //true 、 false 分别表示 显示 、不显示 复选框或单选框
            nocheckInherit: true   //当父节点设置 nocheck = true 时，设置子节点是否自动继承 nocheck = true
        },
        edit: {
            enable: true
        },
    }

    // 树节点单机事件，获取id
    // 点击确定按钮完成并且关闭弹框
    function zTreeOnClick(event, treeId, treeNode) {
        var as = treeNode.classifyId;
        var aas = treeNode.classifyTitle;
        console.log(as);
        console.log(aas);

        // 子页面向父页面传值，封装键值对，父页面拿出
        localStorage.setItem("treeid",as)
        localStorage.setItem("treename",aas)
        var index = parent.layer.getFrameIndex(window.name);
        parent.layer.close(index);

    }

    function zTreeBeforeDrag(treeId, treeNodes) {
        if (treeNodes[0].pId === '0') {
            //alert('一级节点不允许拖放')
            return false;
        }
    };

    function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {
        //禁止将节点拖拽成为根节点
        return !(targetNode == null || (moveType != "inner" && !targetNode.parentTId));
    };

    function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {

        //例如根据你节点的属性确定节点拖拽的规则，比如不能移动二级节点
        //比如三级节点不能放到三级节点下面，仅能放到一级或者二级
        if (treeNodes[0].treeType === '1' || targetNode.treeType === '0') {
            return false;
        }
    };

    function beforeEditName(treeId, treeNode) {
        /* if(treeNode.isParent){
            alert("不准编辑非叶子节点！");
            return false;
        } */
        return true;
    };

// 修改数节点
    function onRename(e, treeId, treeNode, isCancel) {
        if (confirm("您确认修改类别名称?")) {
            console.log(treeNode);
            $.ajax({
                type: 'post',
                url: '/product/edit',
                async: true,
                data: {
                    id: treeNode.classifyId,
                    name: treeNode.classifyTitle
                },
                dataType: 'json'
            })
        }
    }

    function beforeRemove(treeId, treeNode) {
        if (confirm("确认删除?\n将会删除下面的所有内容！")) {
            if (treeNode.isParent) {
                alert("该目录下面还有子目录，请从最底层目录开始删除!");
                return false;
            }
            return true;
        }
        return false;
    }

// 删除数节点
    function onRemove(e, treeId, treeNode) {
        $.ajax({
            type: 'post',
            url: '/product/del',
            async: true,
            data: {
                id: treeNode.id,
            },
            dataType: 'json'
        })
    }

// 拖拽数节点
    function zTreeOnDrop(event, treeId, treeNodes, targetNode, moveType) {
        //如果是树之间的拖放发送拖拽结果给后端
        if (targetNode) {
            var node1 = treeNodes[0].getParentNode();
            $.ajax({
                type: 'post',
                url: '',
                async: true,
                data: {
                    id: treeNodes[0].id,
                    parentId: node1.id
                },
                dataType: 'json'
            })
        }

        //如果是把节点拖放到某个区域生成一个元素
        if (event.target.className === 'zone') {
            let item = document.createElement('div');
            item.className = 'item';
            item.style.left = event.pageX + 'px';
            item.style.top = event.pageY + 'px';
            item.innerHTML = treeNodes[0].name;

            event.target.appendChild(item);
        }
    }

    function addHoverDom(treeId, treeNode) {
        var sObj = $("#" + treeNode.tId + "_span"); //获取节点信息
        if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;

        var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='add node' οnfοcus='this.blur();'></span>"; //定义添加按钮
        sObj.after(addStr); //加载添加按钮
        var btn = $("#addBtn_" + treeNode.tId);
        console.log(treeNode.tId);
        //绑定添加事件，并定义添加操作
        if (btn) btn.bind("click", function () {
            var zTree = $.fn.zTree.getZTreeObj("tree");
            //将新节点添加到数据库中
            var name = 'NewNode';
            添加数节点
            $.ajax({
                url: '/product/addTree',
                dataType: 'json',
                type: 'post',
                data: {"parentId": treeNode.classifyId, "name": "新建文件夹"},
                success: function (response) {
                    var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                    zTree.addNodes(treeNode, response.data);
                }
            })
        });
    }

    function removeHoverDom(treeId, treeNode) {
        $("#addBtn_" + treeNode.tId).unbind().remove();
    }
})